/* Commenté
	Di-Costanzo Jonathan
	Fauché Pierre-Élie
	3TC 3
*/


/* Copyright (c) 2004 by Dept TC INSA Lyon.  All Rights Reserved */

#ifndef __P2P_FILE
#define __P2P_FILE

#include "p2p_common.h"

#define P2P_FILE_NB_ELT 255


typedef struct p2p_files_struct *p2p_files;
typedef struct p2p_files_item_struct *p2p_files_item;

//Création (allocation) d'un p2p_files
p2p_files p2p_files_create();

//Suppression de la liste des fichiers
void p2p_files_delete(p2p_files liste);

//Ajout d'un élément à la liste des fichiers
void p2p_files_add(p2p_files liste, const char* nom_fic, const unsigned long int taille);

//Récupère l'attribut "length" d'une structure p2p_files_struct
int p2p_files_length(p2p_files liste);

//Récupère le nom du fichier.
//Retourne null en cas d'erreur
char* p2p_files_get_name(p2p_files liste, const int offset);

//Récupère la taille du fichier.
//Retourne -1 en cas d'erreur
unsigned long int p2p_files_get_size(p2p_files liste, const int offset);

// vérifie si le fichier demandé est disponible
// sp : paramètres du serveur (nom du répertoire...)
// file : nom du fichier dont on vérifie la présence
// filesize : taille du fichier recherché ou code d'erreur
// retourne P2P_OK ou P2P_ERROR
int p2p_file_is_available(server_params* sp, const char* file, unsigned long int* filesize);

// obtenir une partie d'un fichier (dont on a spécifié l'offset)
// sp : paramètres du serveur (nom du répertoire...)
// file : nom du fichier à lire
// boffset : début de l'offset
// eoffset : fin de l'offset
// data : pour stocker les données que l'on va lire
// retourne P2P_OK ou P2P_ERROR
int p2p_file_get_chunck  (server_params* sp, const char* file, int boffset, int eoffset, unsigned char** data);

// crée un fichier dont on donne le nom et la taille et le remplit de 'x'
// sp : paramètres du serveur (nom du répertoire...)
// file : nom du fichier à créer
// size : taille du fichier à créer
// retourne P2P_OK ou P2P_ERROR
int p2p_file_create_file (server_params* sp, const char* file, int size);

// à la réception du DATA, on écrit la partie du fichier réceptionnée
// sp : paramètres du serveur (nom du répertoire...)
// file : nom du fichier à écrire
// boffset : début de l'offset
// eoffset : fin de l'offset
// data : stocke les données que l'on va écrire dans le fichier
// retourne P2P_OK ou P2P_ERROR
int p2p_file_set_chunck  (server_params* sp, const char* file, int boffset, int eoffset, unsigned char* data);

/***************************************************************************
retourne la liste des fichiers disponibles
***************************************************************************/
p2p_files p2p_files_available(server_params *sp, const char* file, const unsigned char version);

#endif /* __P2P_FILE */
